﻿/*
 * Crée par SharpDevelop.
 * Utilisateur: ngr
 * Date: 19/02/2015
 * Heure: 10:50
 * 
 * Pour changer ce modèle utiliser Outils | Options | Codage | Editer les en-têtes standards.
 */
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;


using Compta.Core.Classes;
using Compta.Core.Structures;
using Compta.Core;

namespace ComptaPerso.Controls
{
	/// <summary>
	/// Description of UC_Operation.
	/// </summary>
	public partial class UC_Operation : UserControl
	{
		ComptaCore core;
		Account acc;

//		public DateTime date{
//			get{return dateOperation.Value;}
//		}
//		
//		public string Denomination{
//			get{return txtbxDenomination.Text;}
//		}
//		
//		public string Categorie{
//			get{return txtbxCategorie.Text;}
//		}
//		
//		public string ModPai_Code{
//			get{return modpai_Code;}
//		}
//		
//		public float Montant{
//			get{return (float)Convert.ToDecimal(txtbxMontant.Text);}
//		}
//		
//		public bool IsCredit{
//			get{return rBtnCredit.Checked;}
//		}
//		
//		public bool IsDebit{
//			get{return rBtnDebit.Checked;}
//		}
		
		Operation op;
		public Operation Op
		{
			get{return op;}
		}
		
		
		string modpai_Code;
		string modpai_label;
		
		// l'info si on a annuler
		public bool Cancel;
		
		// la fenetre qui contiendra le controle
		PopUp pop;
		
		
		
		
		public UC_Operation(ComptaCore core, Account acc, PopUp pop)
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
			this.core = core;
			this.acc = acc;
			this.pop = pop;
			this.Cancel = false;
			this.splitContainer1.Panel2.Enabled = false;
			
			pop.SetTitle("Gestion d'opérations [Compte: " + acc.Name + "]");
			
			op = new Operation();
			
			LoadForm();
			//this.splitContainer1.Panel2Collapsed = true;
			
			
			pop.AddControl(this);
			
		}
		
		/// <summary>
		/// Chargement du formulaire
		/// </summary>
		void LoadForm()
		{
			// date
			lblDate.Text = dateOperation.Value.ToString("yyyy-MM-dd");
			
			// mode de paiement
			cbxModPai.Items.Clear();

			foreach(ModPai m in core.ListModPai)
			{
				cbxModPai.Items.Add(m.Code + " - " + m.Label + " - " + m.OpDirection);
			}
			if (cbxModPai.Items.Count > 0)
			{
				cbxModPai.SelectedIndex = 0;
				//cbxModPai.Text  = cbxModPai.Items[0].ToString();
				modpai_Code = GetModPaiId(cbxModPai.Text.Trim());
			}

			// devise
			lblDevise.Text = acc.Devise_Symbole + " (" + acc.Devise_Label + ")" ;
			
			// les dénominations
			
			cbxDenom.Items.Clear();
			foreach(Denomination dnm in core.ListDenominations)
			{
				cbxDenom.Items.Add(dnm.Label);
			}
			
			
			// les categories
			cbxCategorie.Items.Clear();
			foreach (Categorie c in core.ListCategories)
			{
				cbxCategorie.Items.Add(c.Label);
			}
			
		}
		
		
		void InitOperation(Operation Op)
		{
			
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void CbxModPaiSelectedIndexChanged(object sender, EventArgs e)
		{
			if (!cbxModPai.Text.Equals(""))
			{
				modpai_Code = GetModPaiId(cbxModPai.Text.Trim());
			}
		}
		
		/// <summary>
		/// 
		/// </summary>
		/// <param name="text"></param>
		/// <returns></returns>
		string GetModPaiId(string text)
		{
			string[] tsplit = text.Split('-');
			
			string modpai_Id = tsplit[0].Trim();
			
			if (modpai_Id.Equals("CHQ"))
			{
				lblRef.Visible = true;
				txtbxRef.Visible = true;
			}
			else{
				lblRef.Visible = false;
				txtbxRef.Visible = false;
			}
			
			// label
			modpai_label = tsplit[1].Trim();
			
			// récup du sens de l'opération
			
			if (tsplit[2].Trim().Equals("D"))
			{
				rBtnDebit.Checked = true;
			}
			
			if (tsplit[2].Trim().Equals("C"))
			{
				rBtnCredit.Checked = true;
			}  
			
			return modpai_Id;
		}
		
		/// <summary>
		/// Vérification de la saisie
		/// </summary>
		/// <returns></returns>
		int CheckSaisie()
		{
			int zret = 0;
			
			//---------------------------------------------------
			// la date
			op.OpDate = dateOperation.Value;
			
			//---------------------------------------------------
			// mode de paiement
			op.ModePai_code = modpai_Code;
			op.ModePai = modpai_label;
			
			//---------------------------------------------------
			// catégorie
			int Cat_id = 0;
			if (zret.Equals(0) && cbxCategorie.Text.Equals(""))
			{
				zret = 2;
				//Aucun catégorie n'a été saisie
			}
			else{
				Cat_id = core.CheckCategorieName(cbxCategorie.Text.Trim());
				
			}
			
			//--------------------------------------------------------------------------
			// la dénomination
			if (zret.Equals(0) && cbxDenom.Text.Equals(""))
			{
				zret = 1;
				//aucune dénomonation n'a été saisie pour cette opération 
			}
			else{
				op.Denomination_Label = cbxDenom.Text;
				//---> récup de l'id de la dénomination
				op.Denomination_Id = core.CheckDenomination(op.Denomination_Label,Cat_id, op.ModePai_code);
			}			

			
			//-------------------------------------------------------------------------
			// référence
			op.Reference = txtbxRef.Text;
			if (zret.Equals(0) && modpai_Code.Equals("CHQ") && op.Reference.Equals(""))
			{
				zret = 5;
				// une référence est nécessaire
			}
			
			//-------------------------------------------------------------------------
			// le montant
			op.debit = 0;
			op.credit = 0;
			if (zret.Equals(0))
			{
				if (txtbxMontant.Text.Equals("0")){	
					zret = 3;	
				}
				else{
					txtbxMontant.Text = txtbxMontant.Text.Replace('.', ',');
					
					if (rBtnCredit.Checked)
					{
						try{
							op.credit = (float)Convert.ToDecimal(txtbxMontant.Text.Trim());
						}
						catch{zret = 4;}
					}
					
					if (rBtnDebit.Checked)    
					{
						try{
							op.debit = (float)Convert.ToDecimal(txtbxMontant.Text.Trim());
						}
						catch{zret = 4;}
					}
				}	
		    }
			
			return zret;
		}
		
		
		
		void DateOperationValueChanged(object sender, EventArgs e)
		{
			lblDate.Text = dateOperation.Value.ToString("yyyy-MM-dd");
		}
		
		
		void BtnCancelClick(object sender, EventArgs e)
		{		
			Cancel = true;
			ClosePop();
		}	
		
		void BtnOkClick(object sender, EventArgs e)
		{
			int chk = CheckSaisie();
			if (chk.Equals(0))
			{
				core.AddOperation(acc.Id, op);	
				ClosePop();
			}
			else{
				string msg = "Erreur dans la saisie:\n ";
				
				switch (chk)
				{
					case 1:
						msg += "Aucune dénomonation n'a été saisie pour cette opération.";
						break;
					case 2:
						msg += "Aucun catégorie n'a été saisie.";
						break;
					case 3:
						msg += "Le montant est égal à zéro.";
						break;
					case 4:
						msg += "Le montant doit être numérique.";
						break;
					case 5:
						msg += "Une référence est nécessaire.";
						break;
				}
				
				MessageBox.Show(msg,"Info/Warning");
			}
		}
		
		
		/// <summary>
		/// Fermeture de la fenetre hote
		/// </summary>
		void ClosePop()
		{
			//Cancel = true;
			pop.Hide();
		}
		
		
		/// <summary>
		/// lors de la validation de la dénomination
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void CbxDenomLeave(object sender, EventArgs e)
		{
			Denomination d = core.GetDenominationByLabel(cbxDenom.Text);
			
			if (!d.Label.Equals(""))
			{
				Categorie cat = core.GetCategorieById(d.Categorie_Id);
				cbxCategorie.Text = cat.Label;
			}
		}
		
		void ChkbxIsRecurrentCheckedChanged(object sender, EventArgs e)
		{
			if (chkbxIsRecurrent.Checked)
			{
				this.splitContainer1.Panel2.Enabled = true;
				this.splitContainer1.Panel2.BackColor = Color.PaleGreen;
			}
			else{
				this.splitContainer1.Panel2.Enabled = false;
				this.splitContainer1.Panel2.BackColor = Color.Silver;
			}
		}
	}
}
